#ifndef __LTC2990_H_
#define __LTC2990_H_
#include "main.h"  // 包含HAL库核心头文件（需确保工程已配置HAL）
#include "stm32f4xx_hal.h"
#include <stdbool.h>

/* ------------------- 设备地址定义 ------------------- */

#define LTC2990_DEVICE1_ADDRESS         (0x98)      /* 设备地址1 */
#define LTC2990_DEVICE2_ADDRESS         (0x9A)      /* 设备地址2 */

/* ------------------- 寄存器地址定义 ------------------- */
#define LTC2990_REG_STATUS              (0x00)  // 状态寄存器
#define LTC2990_REG_CONTROL             (0x01)  // 控制寄存器
#define LTC2990_REG_TRIGGER             (0x02)  // 触发寄存器
#define LTC2990_REG_TINT_MSB            (0x04)  // 内部温度 MSB
#define LTC2990_REG_TINT_LSB            (0x05)  // 内部温度 LSB
#define LTC2990_REG_TREMOTE1_MSB        (0x06)  // 远程温度1 MSB
#define LTC2990_REG_TREMOTE1_LSB        (0x07)  // 远程温度1 LSB
#define LTC2990_REG_TREMOTE2_MSB        (0x0A)  // 远程温度2 MSB
#define LTC2990_REG_TREMOTE2_LSB        (0x0B)  // 远程温度2 LSB

/* ------------------- 控制寄存器位定义 ------------------- */
#define LTC2990_CTRL_TEMP_FORMAT_BIT 7  // 温度格式：0=摄氏度，1=开尔文
#define LTC2990_CTRL_REPEAT_MODE_BIT 6  // 模式：0=单次，1=重复
// 测量模式（MODE[4:0]，共5位）
#define LTC2990_MODE_INTERNAL           (0x00)      // 仅内部温度
#define LTC2990_MODE_REMOTE1_2_T        (0x5D)		// 远程1+远程2 温度
#define LTC2990_MODE_REMOTE1_T        	(0x4D)		// 远程1 温度
#define LTC2990_MODE_REMOTE2_T        	(0x55)		// 远程2 温度
#define LTC2990_MODE_REMOTE1_2_V        (0x5E)		// 远程1+远程2 差分电压

/* ------------------- Status寄存器位掩码 ------------------- */
#define LTC2990_STATUS_VCC_READY_MASK           (1 << 6)    // VCC 采样转换完毕标志位
#define LTC2990_STATUS_V4_READY_MASK            (1 << 5)    // V4 采样转换完毕标志位
#define LTC2990_STATUS_V3_READY_MASK            (1 << 4)    // V3 采样转换完毕标志位
#define LTC2990_STATUS_TR2_READY_MASK           (1 << 4)    // TR2 采样转换完毕标志位
#define LTC2990_STATUS_V3_V4_READY_MASK         (1 << 4)    // V3 - V4 采样转换完毕标志位
#define LTC2990_STATUS_V2_READY_MASK            (1 << 3)    // V2 采样转换完毕标志位
#define LTC2990_STATUS_V1_READY_MASK            (1 << 2)    // V1 采样转换完毕标志位
#define LTC2990_STATUS_TR1_READY_MASK           (1 << 2)    // TR1 采样转换完毕标志位
#define LTC2990_STATUS_V1_V2_READY_MASK         (1 << 2)    // V1 - V2 采样转换完毕标志位
#define LTC2990_STATUS_TINT_READY_MASK          (1 << 1)    // 内部温度采样转换完毕标志位
#define LTC2990_STATUS_BUSY_MASK                (1 << 0)    // BUSY标志位

#define LTC2990_DEFAULT_IDEALITY                (1.004f)    // 三极管默认的理想因子

/* ------------------- 枚举与结构体 ------------------- */
// 温度单位
typedef enum {
    LTC2990_TEMP_CELSIUS = 0,
    LTC2990_TEMP_KELVIN
} LTC2990_TempUnit;

typedef enum
{
	REPEAT = 0,	// 重复触发模式
	SINGLE,	    // 单次触发模式
}LTC2990_IsRepeat;

// 设备结构体（支持多设备）
typedef struct {
    I2C_HandleTypeDef *hi2c;  // HAL I2C 句柄（如 &hi2c1）
    uint8_t addr;             // 7位I2C地址（电路中为 0x9A 和 0x98）
    LTC2990_TempUnit unit;    // 温度单位
    LTC2990_IsRepeat repeat;  // 重复测量模式
    uint8_t mode;             // 测量模式（LTC2990_MODE_xxx）
} LTC2990_Device;


/* ------------------- 设备对象（对外接口） ------------------- */
extern LTC2990_Device ltc_dev1;
extern LTC2990_Device ltc_dev2;

/* ------------------- 函数声明（对外接口） ------------------- */
HAL_StatusTypeDef LTC2990_Init(LTC2990_Device *dev, I2C_HandleTypeDef *hi2c, uint8_t addr, LTC2990_TempUnit unit, LTC2990_IsRepeat repeat, uint8_t mode);
HAL_StatusTypeDef LTC2990_MeasureInternal(LTC2990_Device *dev, float *temp);
HAL_StatusTypeDef LTC2990_MeasureRemote1(LTC2990_Device *dev, float *temp, float ideality);
HAL_StatusTypeDef LTC2990_MeasureRemote2(LTC2990_Device *dev, float *temp, float ideality);

#endif
